package report;

import report.Activity;
import report.ActivityService;

description """Teste de aceitação referente a US4.
			Cadastro e Edição de Atividades"""

before "cenários", {
	activityService = new ActivityService();
}

// Cadastro

scenario "Requisitar cadastro de atividade com campos obrigatórios válidos", {
	
	given "um activity com dados válidos", {
		activity = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
	}
	
	when "este requisitar ser cadastrado", {
		activityService.save(activity)
	}
	
	then "ele estará armazenado no sistema na lista de atividades", {
		resultado = activityService.getActivity()
		resultado.nome.shouldBe activity.nome
		resultado.sobrenome.shouldBe activity.sobrenome
		resultado.email.shouldBe activity.email
		resultado.pseudonimo.shouldBe activity.pseudonimo
		resultado.ingresso.shouldBe activity.ingresso
		resultado.titulacao.shouldBe activity.titulacao
	}
}


scenario "Requisitar cadastro de atividade sem todos os campos obrigatórios", {
	
	given "um activity com dados obrigatórios incompletos", {
		activity2 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity3 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity4 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity5 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity6 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
	}
	
	when "estes requisitarem serem cadastrados", {
		activityService.save(activity2)
		activityService.save(activity3)
		activityService.save(activity4)
		activityService.save(activity5)
		activityService.save(activity6)
	}
	
	then "ele não estarão armazenados no sistema", {
		resultado2 = activityService.getNumberActivitys()
		resultado2.shouldBe 2 // administrador + o do primeiro cenário
	}
	
	
}

scenario "Requisitar cadastro de atividade com dados inválidos", {

	given "um activity com dados obrigatórios completos, porém alguns inválidos", {
		activity7 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity8 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity9 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity10 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity11 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
		activity12 = new Activity(nature:"ensino";theme:"bdd";targe:"alunos"; description:"xpto;reasons"melhoria";expectedResults:"a b c"; actualResults"a b d";comments:"nothing";partners:"nothing";time:new Date().parse("d/M/yyyy","21/3/2008"), plan:null)
	}
	
	when "este requisitar ser cadastrado", {
		activityService.save(activity7)
		activityService.save(activity8)
		activityService.save(activity9)
		activityService.save(activity10)
		activityService.save(activity11)
		activityService.save(activity12)
	}
	
	then "ele não estará armazenado no sistema", {
		resultado3 = activityService.getNumberActivitys()
		resultado3.shouldBe 2 // administrador + o do primeiro cenário
	}
	
}

// Edição

scenario "Requisitar edição de atividade com campos obrigatórios válidos", {
	
	given "um activity com dados válidos", {
		activity13 = activityService.getActivity()
		activity13.sobrenome = "Aleixo2"
		activity13.email = "ronaldo@email.com"
		activity13.titulacao = "Master Ninja"
	}
	
	when "este requisitar ser atualizado", {
		activityService.save(activity13)
	}
	
	then "as modificações não serão salvas no sistema", {
		resultado4 = activityService.getActivity()
		resultado4.sobrenome.shouldBe activity13.sobrenome
		resultado4.titulacao.shouldBe activity13.titulacao
	}
	
}

scenario "Requisitar edição de activity não existente", {
	given "um id de atividade inexistente", {
		atividadeNulo = activityService.getAtividadeById(35345)
	}
	
	when "este requisitar ser atualizado", {
		def updateAtividade = {
			atividadeNulo.ehBolsista = false
		}
	}
	
	then "será lançado uma exceção, e consequentemente não está armazenado no sistema", {
		ensureThrows(Exception) {
			updateAtividade()
	    }
	}
}

scenario "Requisitar edição de activity sem todos os campos obrigatórios", {
	given "um activity com novos dados obrigatórios incompletos", {
		activity14 = activityService.getActivity()
		activity14.nome = null
	}
	
	when "este requisitar salvar seus novos dados", {
		resultado5 = activityService.save(activity14)
	}
	
	then "as modificações não serão salvas no sistema", {
		ensure(resultado5) {
			isNull
		}
	}
	
}

scenario "Requisitar edição de activity com dados inválidos", {
	given "um activity com dados obrigatórios completos, porém algum inválido", {
		activity15 = activityService.getActivity()
		activity15.nome = "1"
	}
	
	when "este requisitar salvar novos dados", {
		resultado6 = activityService.save(activity15)
	}
	
	then "as modificação não será salva no sistema", {
		ensure(resultado6) {
			isNull
		}
	}
	
}			